oblouk ze tri bodu

Otázka od: Petr Fiser

3. 8. 2004 14:55

Dobry den.

Nema nekdo napsany kus kodu pro vypocet parametru oblouku ze tri zadanych bodu
v rovine v kartezkych souradnicich.
Potrebuji zjistit Radius[r] a Stred[x, y].
Radius jsem vypocital, ale pri pocitani stredoveho bodu obcas dochazi k chybe.
Zrejmne nemam nejstatnejsi reseni vypoctu rovnic kruznice.

Dekuji.
Petr Fiser


Odpovedá: Slavomir Skopalik

3. 8. 2004 15:07

Hledej konstrukci opsane kruznice troujuhelniku.

 Slavek

> Nema nekdo napsany kus kodu pro vypocet parametru oblouku ze
> tri zadanych bodu v rovine v kartezkych souradnicich.
> Potrebuji zjistit Radius[r] a Stred[x, y]. Radius jsem
> vypocital, ale pri pocitani stredoveho bodu obcas dochazi k
> chybe. Zrejmne nemam nejstatnejsi reseni vypoctu rovnic kruznice.
>
> Dekuji.
> Petr Fiser


Odpovedá: Petr Brant

3. 8. 2004 16:58

Na soukromy mail posilam reseni. Vzhledem k tomu, ze by se to mohlo hodit,
cast toho reseni (samotne vypocty) davam k dispozici sem.

RNDr. Petr Brant [brant@dcomm.cz]
http://brant.wz.cz <http://brant.wz.cz>

D&COMM s.r.o.
Korunovacni 6
Praha 7
tel. +420724007234

unit Unit2;

interface
procedure reseni_rovnice(a11,a12,a13,a21,a22,a23:extended; var x,
y:extended; var chyba:integer);
procedure prunik_primek(x1, y1, x2, y2, x3, y3, x4, y4:extended; var
x,y:extended; var na_prvni, na_druhe:boolean; var chyba:integer);
procedure stred_dvojice_bodu(x1, y1, x2, y2:extended; var xs, ys:extended);
procedure druhy_bod_kolmice (x1, y1, x2, y2, x3, y3:extended;var xs,
ys:extended);
function vzdal_bodu(x1,y1,x2,y2:extended):extended;


implementation

function vzdal_bodu(x1,y1,x2,y2:extended):extended;
begin
 Result:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;


procedure reseni_rovnice(a11,a12,a13,a21,a22,a23:extended; var x,
y:extended; var chyba:integer);
const malo = 0.001;
var d, dx, dy:extended;
begin
 d:=a11*a22-a12*a21;
 dx:=a13*a22-a12*a23;
 dy:=a11*a23-a13*a21;
 if (abs(d)<malo) and (abs(dx)<malo) then
 begin
  chyba:=2; //nekonecne mnoho reseni
  exit;
 end;
 if (abs(d)<malo) and (abs(dx)>=malo) then
 begin
  chyba:=1; //bez reseni
  exit;
 end;
 if (abs(d)>malo) then
 begin
  chyba:=0; //existuje reseni
  x:=dx/d;
  y:=dy/d;
 end;
end;

procedure stred_dvojice_bodu(x1, y1, x2, y2:extended; var xs, ys:extended);
begin
 xs:=(x1 + x2)/2;
 ys:=(y1 + y2)/2;
end;

procedure druhy_bod_kolmice (x1, y1, x2, y2, x3, y3:extended;var xs,
ys:extended);
var
    u,v, pom:extended;
begin
 u:=x1 - x2;
 v:=y1 - y2;
 pom:=u;
 u:=v;
 v:=-pom;
 xs:=x3 + u;
 ys:=y3 + v;
end;



procedure prunik_primek(x1, y1, x2, y2, x3, y3, x4, y4:extended; var
x,y:extended; var na_prvni, na_druhe:boolean; var chyba:integer);
//na_prvni, na_druhe: true znamena, ze prusecik lezi na prvni resp. druhe
usecce
//to ma vyznam pri pruniku usecek.
var r,t:extended;
begin
 //[x1, y1] a [x2, y2] jsou body na prvni primce
 //[x3, y3] a [x4, y4] jsou body na druhe primce
 reseni_rovnice(x2 - x1, -x4 + x3, x3 - x1, y2 - y1, -y4 + y3, y3 - y1, t,
r, chyba);
 if chyba <> 0 then exit;

 na_prvni := (t>=0) and (t<=1);
 na_druhe := (r>=0) and (r<=1);
 x:= x1 + (x2 - x1)*t;
 y:= y1 + (y2 - y1)*t;
end;

end.


> Nema nekdo napsany kus kodu pro vypocet parametru oblouku ze tri zadanych
> bodu v rovine v kartezkych souradnicich.
> Potrebuji zjistit Radius[r] a Stred[x, y].
> Radius jsem vypocital, ale pri pocitani stredoveho bodu obcas dochazi k
> chybe. Zrejmne nemam nejstatnejsi reseni vypoctu rovnic kruznice.
>